package com.example.service.impl;

import com.example.dao.OrganizationDao;
import com.example.entity.Organization;
import com.example.service.OrganizationService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import javax.servlet.http.HttpSession;
import com.example.entity.Users;
/**
 * 组织管理服务实现类
 * 实现组织相关的业务逻辑操作
 * 使用@Transactional注解确保方法的事务性
 */
@Service
@Transactional
public class OrganizationServiceImpl implements OrganizationService {

    @Autowired
    private OrganizationDao organizationDao; // 注入组织数据访问对象
  private final HttpSession httpSession;
  @Autowired
    public OrganizationServiceImpl(OrganizationDao organizationDao, HttpSession httpSession) {
        this.organizationDao = organizationDao;
        this.httpSession = httpSession;
    }

    /**
     * 获取所有组织列表
     * @return 组织列表
     */
    @Override
    public List<Organization> getAllOrganizations() {
        // 调用DAO层查询所有组织方法
        return organizationDao.findAllOrganizations();
    }

    /**
     * 根据组织ID获取单个组织详情
     * @param orgid 组织ID
     * @return 组织对象，未找到返回null
     */
    @Override
    public Organization getOrganizationByOrgid(Integer orgid) {
        // 调用DAO层按ID查询方法
        return organizationDao.findOrganizationByOrgid(orgid);
    }

    /**
     * 添加新组织
     * @param organization 组织对象
     * @return 添加成功返回true，失败返回false
     */
    @Override
    public boolean addOrganization(Organization organization) {
        // 调用DAO层插入方法，返回受影响行数
        return organizationDao.insertOrganization(organization) > 0;
    }

    /**
     * 更新组织信息
     * @param organization 组织对象
     * @return 更新成功返回true，失败返回false
     */
    @Override
    public boolean updateOrganization(Organization organization) {
        // 调用DAO层更新方法，返回受影响行数
        return organizationDao.updateOrganization(organization) > 0;
    }

    /**
     * 删除组织
     * @param orgid 组织ID
     * @return 删除成功返回true，失败返回false
     */
    @Override
    public boolean deleteOrganization(Integer orgid) {
        // 调用DAO层删除方法，返回受影响行数
        return organizationDao.deleteOrganization(orgid) > 0;
    }

    /**
     * 按条件搜索组织
     * @param org_name 组织名称(可选)
     * @param org_type 组织类型(可选)
     * @return 符合条件的组织列表
     */
    @Override
    public List<Organization> searchOrganizations(@Param("org_name") String org_name,
                                                  @Param("org_type") String org_type) {
        // 调用DAO层条件查询方法
        return organizationDao.searchOrganizations(org_name, org_type);
    }
    
    // 根据用户ID获取组织信息


    @Override
    public Organizations getCurrentOrganization() {
        return null;
    }

    @Override
    public int getVolunteerCount(int orgId) {
        // 这里需要实现获取机构志愿者数量的逻辑
        // 暂时返回模拟数据
        return 42;
    }

    @Override
    public Organizations findByUsername(String username) {
        // 实现根据用户名查询机构的逻辑
        return organizationDao.findByUsername(username);
    }
    @Override
    public Organizations getOrganizationByUserId(int userId) {
        Organizations organizations = organizationDao.findByUserId(userId);

        return organizations;
    }
    @Transactional
    @Override
    public void updateOrganization(Organizations org) {
        organizationDao.update(org);

    }
    @Override
    public boolean existsById(int orgId) {
        return organizationDao.existsById(orgId);
    }

}